﻿using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.DirectX;
using TgcViewer.Utils.TgcGeometry;
using TgcViewer.Utils.TgcSceneLoader;
using TgcViewer.Utils.Collision.ElipsoidCollision;

namespace AlumnoEjemplos.GraphiX
{
    /// <summary>
    /// Objeto que contiene los datos necesarios para mover y comprobar
    /// colisiones de los objetos no estáticos.
    /// 
    /// Autor: Pablo Bergna, Marcelo Rebasti
    /// </summary>
    class ObjetoMovible
    {
        private TgcMesh mesh;
        private TgcElipsoid elipsoid;
        private Vector3 center;

        public TgcMesh Mesh
        {
            get { return this.mesh; }
            set { this.mesh = value; }
        }

        public TgcElipsoid Elipsoid
        {
            get { return this.elipsoid; }
            set { this.elipsoid = value; }
        }

        public Vector3 Center
        {
            get { return this.center; }
            set { this.center = value; }
        }

        /// <summary>
        /// Collider asociado al objeto, se recalcula cada vez que es solicitado
        /// por si el objeto sufrió un desplazamiento.
        /// </summary>
        public Collider Collider
        {
            get { return BoundingBoxCollider.fromBoundingBox(mesh.BoundingBox); }
        }

        public ObjetoMovible(TgcMesh _mesh)
        {
            this.mesh = _mesh;
            this.elipsoid = new TgcElipsoid(
                this.mesh.BoundingBox.calculateBoxCenter(),
                this.mesh.BoundingBox.calculateAxisRadius());
        }
    }
}
